#ifndef MAPLOCATION_H_
#define MAPLOCATION_H_

#include "map/RoadSegment.h"

#include <string>

/*
 * Tipo enumerado que representa el tipo de objeto en el mapa.
 */
enum MapLocationType {
	Hotel, Restaurant, PoliceStation, School, Hospital, Unknown
};

/*
 * Clase que representa un objeto en el mapa. Consta de un id unico, un nombre al camino al que pertenece,
 * una altura dentro de ese camino y un tipo.
 */
class MapLocation {
public:
	/*
	 * Constructor, recibe el id, el nombre del camino al que pertenece, la numeracion y el tipo.
	 */
	MapLocation(std::string id, MapLocationType type, RoadSegment* roadSegment, int height);

	/*
	 * Destructor por defecto.
	 */
	virtual ~MapLocation();

	// Getters.
	virtual std::string getId();

	virtual std::string getRoadName();

	virtual int getHeight();

	virtual MapLocationType getType();

	virtual MapPoint getPosition();

	virtual double getAngle();

	/*
	 * Metodo para comparar con otro objeto del tipo MapLocation. Compara por id.
	 */
	virtual bool equals(MapLocation* other);

private:
	virtual void setId(std::string id);
	virtual void setType(MapLocationType type);
	virtual void setRoadSegment(RoadSegment *roadSegment) { this->roadSegment = roadSegment; }
	virtual void setHeight(int height);

	std::string id;
	MapLocationType type;
	RoadSegment* roadSegment;
	int height;
};

#endif /* MAPLOCATION_H_ */
